/*
 * 请开发一个自上而下的模块化程序，用于完成以下任务
 *
 * 题目链接：https://programming.pku.edu.cn/probset/c4b75386cfd8411991908475c4b91bc6/aaf2128568124c668bc9f923e81509e5/
 * 作者：lyazj <seeson@pku.edu.cn>
 *
 * 本题所需主要知识点：
 *   - 函数
 *   - 面向过程
 */

#include <stdio.h>
#include <stdlib.h>

// 两个数组和元素个数
int n1, n2;
int *a1, *a2;

// a) 输入
void input(void)
{
  scanf(" %d%d", &n1, &n2);

  // 分配空间时直接连续分配，省去合并过程
  a1 = (int *)malloc((n1 + n2) * sizeof *a1);
  a2 = a1 + n1;

  for(int i = 0; i < n1 + n2; ++i) scanf(" %d", &a1[i]);
}

// qsort() 使用的比较器
int cmp(const int *a, const int *b) { return *a - *b; }

// b) 排序
void sort(void)
{
  qsort(a1, n1, sizeof(int), (int (*)(const void *, const void *))cmp);
  qsort(a2, n2, sizeof(int), (int (*)(const void *, const void *))cmp);
}

// c) 合并
void merge(void)
{
  // empty
}

// d) 输出
void output(void)
{
  for(int i = 0; i < n1 + n2; ++i) printf("%s%d", i ? " " : "", a1[i]);
  printf("\n");
}

int main(void)
{
  input();
  sort();
  merge();
  output();
  return 0;
}
